# 函数
def add1():
    re=1+2
    print(re)
add1()

def add1(a,b):
    re =a+b
    print(re)
add1(4,6)


# 返回值
def sum1():
    return '烟'
w=sum1()
print(w)


def sum1(a,b):
    return a+b
q=sum1(1,2)
print(q)

# 函数说明文档
def a():
    return  1
help(a)

# 函数嵌套
def test1():
    print('_' *20)
def test2(a):
    i=0
    while i <a:
        test1()
        i+=1

test2(4)


# 三个数的和
def sum(a,b,c):
    return a+b+c
w=sum(1,2,3)
print(w)

# 变量域,局部变量
def test1():
    a=100
    print(a)
test1()
print(a)

# 全局变量
a=100
def testa():
    print(a)

def testb():
    print(a)
testb()
testa()

def test1():
    print(a)
def test2():
    # 声明全局变量
    global a
    a=200
    print(a)
test1()
test2()

# 返回值
def re():
    return 1
    return 2
w=re()
print(w)

# 函数的参数
# 关键字参数
def user(name,age,gender):
    print(f'您的名字是{name}，年龄{age}，性别是{gender}')
user('wq',18,'女')

# 缺省参数
def user(name,age,gender='女1'):
    print(f'您的名字是{name}，年龄{age}，性别是{gender}')
user('wq',18)

# 不定长参数
def user(*args):
    print(args)
user('wq','18')
list1=[1,2,1,3]
user(*list1)

def user(**kwargs):
    print(kwargs)
dict1={'name': 'TOM', 'age': 18}
user(**dict1)
user(name='wq',age=18)

# 拆包元组
def re():
    return 100,200
num1,num2=re()
print(num1)
print(num2)

# 拆包字典
dict={'name':'wq','age':18}
a,b=dict1
print(a)
print(b)
print(dict1[a])
print(dict1[b])

# 交换变量值
a,b=3,5
a,b=b,a
print(a)
print(b)

# 所谓可变类型与不可变类型是指:
# 数据能够直接进行修改, 如果能直接修改那么就是可变, 否则是不可变。
# 可变类型:列表,字典,集合
# 不可变类型: 整型,浮点型,字符串,元组

# read() 读
# readlines() 读可以按照行的方式把整个文件中的内容进行一次性读取
# 关闭文件
# f.close()
# readline()一次读取一行内容。
# seek() 作用: 用来移动文件指针
#  tell() 作用: 用来查看文件指针位置
# 导入os模块
import os
# 文件重命名 os.rename
# 删除文件 os.remove()
# 创建文件 os.mkdir()
# 删除文件夹os.rmdir
# 获取当前目录os.getcwd
# 改变目录 os.chdir
# 获取目录os.listdir
# 获取文件目录os.path.dirname(__file__)

# 递归
# 3以内数字累加和
def sum1(num1):
    # 如果是1，直接返回1
    if num1==1:
        return 1
    # 如果不是1，重复执行并返回结果
    return num1+sum1(num1-1)
w=sum1(3)
print(w)

# lambda语法
# 无参数
fun1=lambda:100
print(fun1())

# 一个参数
fun1=lambda a:a
print(fun1(10))

# 默认参数
fun1=lambda a,b,c=100:a+b+c
print(fun1(10,20))

# 可变参数: *args
fun1=lambda *args :args
print(fun1(10,20,50))

# 可变参数: **kwargs
fun1=lambda **kwargs:kwargs
print(fun1(name='wq',age=18))


# 列表数据按字典key的值排序
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按着name升序
students.sort(key=lambda x:x['name'])
print(students)
# 按着name降序
students.sort(key=lambda x:x['name'],reverse=True)
print(students)
# 按着age值升序
students.sort(key=lambda x:x['age'])
print(students)

# abs()函数  数字后在进行求和计算。
def add1(a,b):
    return abs(a)+abs(b)
re=add1(-1,2)
print(re)

# map()  计算list1序列中各个数字的2次方。
list1=[1,2,3,4]
def fun1(x):
    return x **2
re=map(fun1,list1)
print(re)
print(list(re))

# reduce()  每次func计算的结果继续和序列的下一个元素做累积计算。
import functools
list1=[1,2,3,4]
def fun1(a,b):
    return a+b
re = functools.reduce(fun1,list1)
print(re)

# filter(func, Ilst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换

list1=[1,2,3,4,5,6]
def fun1(x):
    return x%2==0
re=filter(fun1,list1)
print(re)
print(list(re))





